Use the slice allocator for many small allocations.
authorMatthias Clasen <mclasen@redhat.com>
Wed, 4 Jan 2006 07:06:12 +0000 (07:06 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 4 Jan 2006 07:06:12 +0000 (07:06 +0000)
2006-01-04  Matthias Clasen  <mclasen@redhat.com>

* gtk/gtkaccelmap.c:
* gtk/gtkactiongroup.c:
* gtk/gtkdialog.c:
* gtk/gtkfilesystemunix.c:
* gtk/gtkgc.c:
* gtk/gtkkeyhash.c:
* gtk/gtkplug.c:
* gtk/gtktextiter.c:
* gtk/gtktextlayout.c:
* gtk/gtkuimanager.c:
* gtk/gtkwidget.c:
* gtk/gtkwindow.c:
* gtk/gtkxembed.c: Use the slice allocator for many small
allocations.

* gtk/gtkcolorsel.c:
* gtk/gtktreeview.c: Use IPN.

* gtk/gtkwidget.c: Remove an unused field from the AccelPath
struct.

18 files changed:
ChangeLog
ChangeLog.pre-2-10
gtk/gtkaccelmap.c
gtk/gtkactiongroup.c
gtk/gtkcolorsel.c
gtk/gtkdialog.c
gtk/gtkfilesystemunix.c
gtk/gtkgc.c
gtk/gtkkeyhash.c
gtk/gtkplug.c
gtk/gtktextiter.c
gtk/gtktextlayout.c
gtk/gtktreesortable.c
gtk/gtktreeview.c
gtk/gtkuimanager.c
gtk/gtkwidget.c
gtk/gtkwindow.c
gtk/gtkxembed.c

index 6e195f5556d985984b14af712e6d0918af25f756..488d38a962ebfede822b54cb90ea6f807b494b89 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2006-01-04  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkaccelmap.c: 
+       * gtk/gtkactiongroup.c: 
+       * gtk/gtkdialog.c: 
+       * gtk/gtkfilesystemunix.c: 
+       * gtk/gtkgc.c: 
+       * gtk/gtkkeyhash.c: 
+       * gtk/gtkplug.c: 
+       * gtk/gtktextiter.c: 
+       * gtk/gtktextlayout.c: 
+       * gtk/gtkuimanager.c: 
+       * gtk/gtkwidget.c: 
+       * gtk/gtkwindow.c: 
+       * gtk/gtkxembed.c: Use the slice allocator for many small 
+       allocations.
+
+       * gtk/gtkcolorsel.c: 
+       * gtk/gtktreeview.c: Use IPN.
+
+       * gtk/gtkwidget.c: Remove an unused field from the AccelPath 
+       struct.
+
 2006-01-04  Tor Lillqvist  <tml@novell.com>
 
        * gtk-zip.sh.in: Include also the gtk20-properties message catalogs.
index 6e195f5556d985984b14af712e6d0918af25f756..488d38a962ebfede822b54cb90ea6f807b494b89 100644 (file)
@@ -1,3 +1,26 @@
+2006-01-04  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkaccelmap.c: 
+       * gtk/gtkactiongroup.c: 
+       * gtk/gtkdialog.c: 
+       * gtk/gtkfilesystemunix.c: 
+       * gtk/gtkgc.c: 
+       * gtk/gtkkeyhash.c: 
+       * gtk/gtkplug.c: 
+       * gtk/gtktextiter.c: 
+       * gtk/gtktextlayout.c: 
+       * gtk/gtkuimanager.c: 
+       * gtk/gtkwidget.c: 
+       * gtk/gtkwindow.c: 
+       * gtk/gtkxembed.c: Use the slice allocator for many small 
+       allocations.
+
+       * gtk/gtkcolorsel.c: 
+       * gtk/gtktreeview.c: Use IPN.
+
+       * gtk/gtkwidget.c: Remove an unused field from the AccelPath 
+       struct.
+
 2006-01-04  Tor Lillqvist  <tml@novell.com>
 
        * gtk-zip.sh.in: Include also the gtk20-properties message catalogs.
index c95fbcfc8edf2d36c31996bd90371e44cb434882..d096f8560007d46fb4016122fef0930eaf41c3b6 100644 (file)
@@ -57,8 +57,8 @@ typedef struct {
   guint        accel_mods;
   guint               std_accel_key;
   guint               std_accel_mods;
-  guint        changed : 1;
-  guint        lock_count;
+  guint        changed    :  1;
+  guint        lock_count : 15;
   GSList      *groups;
 } AccelEntry;
 
@@ -179,8 +179,8 @@ gtk_accel_map_add_entry (const gchar    *accel_path,
     }
   else
     {
-      entry = g_new0 (AccelEntry, 1);
-      entry->accel_path = g_quark_to_string (g_quark_from_string (accel_path));
+      entry = g_slice_new0 (AccelEntry);
+      entry->accel_path = g_intern_string (accel_path);
       entry->std_accel_key = accel_key;
       entry->std_accel_mods = accel_mods;
       entry->accel_key = accel_key;
index 7910644d6010d318463a0c6bab6a3d6d91f332d0..b852079fd5a95e0ca9a171421d3ed1c2935c6659 100644 (file)
@@ -714,7 +714,7 @@ shared_data_unref (gpointer data)
       if (shared_data->destroy) 
        (*shared_data->destroy) (shared_data->data);
       
-      g_free (shared_data);
+      g_slice_free (SharedData, shared_data);
     }
 }
 
@@ -748,7 +748,7 @@ gtk_action_group_add_actions_full (GtkActionGroup       *action_group,
 
   g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
 
-  shared_data = g_new0 (SharedData, 1);
+  shared_data = g_slice_new0 (SharedData);
   shared_data->ref_count = 1;
   shared_data->data = user_data;
   shared_data->destroy = destroy;
@@ -844,7 +844,7 @@ gtk_action_group_add_toggle_actions_full (GtkActionGroup             *action_gro
 
   g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
 
-  shared_data = g_new0 (SharedData, 1);
+  shared_data = g_slice_new0 (SharedData);
   shared_data->ref_count = 1;
   shared_data->data = user_data;
   shared_data->destroy = destroy;
index a94401c6cc5f1ec1c217dcaad8759208aba2aa21..b7a7346415e5965d6cbbd82a080174a548ffee54 100644 (file)
@@ -108,6 +108,7 @@ struct _ColorSelectionPrivate
   guint changing : 1;
   guint default_set : 1;
   guint default_alpha_set : 1;
+  guint has_grab : 1;
   
   gdouble color[COLORSEL_NUM_CHANNELS];
   gdouble old_color[COLORSEL_NUM_CHANNELS];
@@ -140,7 +141,6 @@ struct _ColorSelectionPrivate
   /* Window for grabbing on */
   GtkWidget *dropper_grab_widget;
   guint32    grab_time;
-  gboolean   has_grab;
 
   /* Connection to settings */
   gulong settings_connection;
@@ -1907,6 +1907,8 @@ gtk_color_selection_class_init (GtkColorSelectionClass *klass)
                                                       P_("Palette to use in the color selector"),
                                                       default_colors,
                                                       GTK_PARAM_READWRITE));
+
+   g_type_class_add_private (gobject_class, sizeof (ColorSelectionPrivate));
 }
 
 /* widget functions */
@@ -1925,7 +1927,7 @@ gtk_color_selection_init (GtkColorSelection *colorsel)
   
   gtk_widget_push_composite_child ();
 
-  priv = colorsel->private_data = g_new0 (ColorSelectionPrivate, 1);
+  priv = colorsel->private_data = G_TYPE_INSTANCE_GET_PRIVATE (colorsel, GTK_TYPE_COLOR_SELECTION, ColorSelectionPrivate);
   priv->changing = FALSE;
   priv->default_set = FALSE;
   priv->default_alpha_set = FALSE;
@@ -2118,14 +2120,6 @@ gtk_color_selection_destroy (GtkObject *object)
 static void
 gtk_color_selection_finalize (GObject *object)
 {
-  GtkColorSelection *cselection = GTK_COLOR_SELECTION (object);
-  
-  if (cselection->private_data)
-    {
-      g_free (cselection->private_data);
-      cselection->private_data = NULL;
-    }
-  
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
index 6ed9952aa0124a9dbe7de19ed7be22feceecae26..a04be42029affb37792547f03a8889d78d9d8f6f 100644 (file)
@@ -532,6 +532,12 @@ gtk_dialog_new_with_buttons (const gchar    *title,
   return GTK_WIDGET (dialog);
 }
 
+static void 
+response_data_free (gpointer data)
+{
+  g_slice_free (ResponseData, data);
+}
+
 static ResponseData*
 get_response_data (GtkWidget *widget,
                   gboolean   create)
@@ -541,12 +547,12 @@ get_response_data (GtkWidget *widget,
 
   if (ad == NULL && create)
     {
-      ad = g_new (ResponseData, 1);
+      ad = g_slice_new (ResponseData);
       
       g_object_set_data_full (G_OBJECT (widget),
                               I_("gtk-dialog-response-data"),
                               ad,
-                              g_free);
+                             response_data_free);
     }
 
   return ad;
index 55865201a081ae1006dbae90df5e91caa3629c4e..0dfdcd07839e7a81ac136d6b0cf82e048aa4b4b6 100644 (file)
@@ -702,7 +702,7 @@ icon_cache_element_free (IconCacheElement *element)
 {
   if (element->pixbuf)
     g_object_unref (element->pixbuf);
-  g_free (element);
+  g_slice_free (IconCacheElement, element);
 }
 
 static void
@@ -744,7 +744,7 @@ get_cached_icon (GtkWidget   *widget,
   element = g_hash_table_lookup (cache, name);
   if (!element)
     {
-      element = g_new0 (IconCacheElement, 1);
+      element = g_slice_new0 (IconCacheElement);
       g_hash_table_insert (cache, g_strdup (name), element);
     }
 
index a2cf6e4c051569f8c42f09f2fafbb35ca5d0f041..867d446b020eef297a93d0fe553a115677fcc76e 100644 (file)
@@ -64,7 +64,7 @@ static gint      gtk_gc_drawable_equal   (GtkGCDrawable *a,
 
 static gint initialize = TRUE;
 static GCache *gc_cache = NULL;
-
+static GQuark quark_gtk_gc_drawable_ht = 0;
 
 GdkGC*
 gtk_gc_get (gint             depth,
@@ -102,21 +102,21 @@ free_gc_drawable (gpointer data)
 {
   GtkGCDrawable *drawable = data;
   g_object_unref (drawable->drawable);
-  g_free (drawable);
+  g_slice_free (GtkGCDrawable, drawable);
 }
 
 static GHashTable*
 gtk_gc_get_drawable_ht (GdkScreen *screen)
 {
-  GHashTable *ht = g_object_get_data (G_OBJECT (screen), "gtk-gc-drawable-ht");
+  GHashTable *ht = g_object_get_qdata (G_OBJECT (screen), quark_gtk_gc_drawable_ht);
   if (!ht)
     {
       ht = g_hash_table_new_full ((GHashFunc) gtk_gc_drawable_hash,
                                  (GEqualFunc) gtk_gc_drawable_equal,
                                  NULL, free_gc_drawable);
-      g_object_set_data_full (G_OBJECT (screen), 
-                             I_("gtk-gc-drawable-ht"), ht, 
-                             (GDestroyNotify)g_hash_table_destroy);
+      g_object_set_qdata_full (G_OBJECT (screen), 
+                              quark_gtk_gc_drawable_ht, ht, 
+                              (GDestroyNotify)g_hash_table_destroy);
     }
   
   return ht;
@@ -127,6 +127,8 @@ gtk_gc_init (void)
 {
   initialize = FALSE;
 
+  quark_gtk_gc_drawable_ht = g_quark_from_static_string ("gtk-gc-drawable-ht");
+
   gc_cache = g_cache_new ((GCacheNewFunc) gtk_gc_new,
                          (GCacheDestroyFunc) gtk_gc_destroy,
                          (GCacheDupFunc) gtk_gc_key_dup,
@@ -170,7 +172,7 @@ gtk_gc_new (gpointer key)
   drawable = g_hash_table_lookup (ht, &keyval->depth);
   if (!drawable)
     {
-      drawable = g_new (GtkGCDrawable, 1);
+      drawable = g_slice_new (GtkGCDrawable);
       drawable->depth = keyval->depth;
       drawable->drawable = gdk_pixmap_new (gdk_screen_get_root_window (screen), 
                                           1, 1, drawable->depth);
index 12648e050d26ba53bb80bc74d37bd309e1cfdd2c..7265daa3c8049d147109c5e22114b6c01cd6de25 100644 (file)
@@ -147,7 +147,7 @@ key_hash_free_entry (GtkKeyHash      *key_hash,
     (*key_hash->destroy_notify) (entry->value);
   
   g_free (entry->keys);
-  g_free (entry);
+  g_slice_free (GtkKeyHashEntry, entry);
 }
 
 static void
@@ -202,7 +202,7 @@ _gtk_key_hash_add_entry (GtkKeyHash      *key_hash,
                         GdkModifierType  modifiers,
                         gpointer         value)
 {
-  GtkKeyHashEntry *entry = g_new (GtkKeyHashEntry, 1);
+  GtkKeyHashEntry *entry = g_slice_new (GtkKeyHashEntry);
 
   entry->value = value;
   entry->keyval = keyval;
index 352b03db66a2e55669b438c02c14e420861a743a..962ded6d663df36d9f80f237d8e70bc56683bb47 100644 (file)
@@ -802,7 +802,7 @@ keys_foreach (GtkWindow      *window,
              gpointer        data)
 {
   GHashTable *new_grabbed_keys = data;
-  GrabbedKey *key = g_new (GrabbedKey, 1);
+  GrabbedKey *key = g_slice_new (GrabbedKey);
 
   key->accelerator_key = keyval;
   key->accelerator_mods = modifiers;
@@ -810,13 +810,19 @@ keys_foreach (GtkWindow      *window,
   g_hash_table_replace (new_grabbed_keys, key, key);
 }
 
+static void
+grabbed_key_free (gpointer data)
+{
+  g_slice_free (GrabbedKey, data);
+}
+
 static void
 gtk_plug_keys_changed (GtkWindow *window)
 {
   GHashTable *new_grabbed_keys, *old_grabbed_keys;
   GtkPlug *plug = GTK_PLUG (window);
 
-  new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)g_free, NULL);
+  new_grabbed_keys = g_hash_table_new_full (grabbed_key_hash, grabbed_key_equal, (GDestroyNotify)grabbed_key_free, NULL);
   _gtk_window_keys_foreach (window, keys_foreach, new_grabbed_keys);
 
   if (plug->socket_window)
index c919f386dcbf42d894df8638c0e7937345c94124..31e3d6b84c2a268fbff4de0c3d2af5b9961e4e28 100644 (file)
@@ -441,7 +441,7 @@ gtk_text_iter_copy (const GtkTextIter *iter)
 
   g_return_val_if_fail (iter != NULL, NULL);
 
-  new_iter = g_new (GtkTextIter, 1);
+  new_iter = g_slice_new (GtkTextIter);
 
   *new_iter = *iter;
 
@@ -462,7 +462,7 @@ gtk_text_iter_free (GtkTextIter *iter)
 {
   g_return_if_fail (iter != NULL);
 
-  g_free (iter);
+  g_slice_free (GtkTextIter, iter);
 }
 
 GType
index 84f4e5cdebd33edce6e65565a55b2ab3be2cb3ef..a73533fe6e7ee7003ec33c59656ae3cc593e1efa 100644 (file)
@@ -1323,7 +1323,7 @@ gtk_text_attr_appearance_destroy (PangoAttribute *attr)
   if (appearance->fg_stipple)
     g_object_unref (appearance->fg_stipple);
 
-  g_free (attr);
+  g_slice_free (GtkTextAttrAppearance, attr);
 }
 
 static gboolean
@@ -1369,7 +1369,7 @@ gtk_text_attr_appearance_new (const GtkTextAppearance *appearance)
     klass.type = gtk_text_attr_appearance_type =
       pango_attr_type_register ("GtkTextAttrAppearance");
 
-  result = g_new (GtkTextAttrAppearance, 1);
+  result = g_slice_new (GtkTextAttrAppearance);
   result->attr.klass = &klass;
 
   result->appearance = *appearance;
index d72ef22b530cf31af5c4a5f4fefc496cfff7ed7f..4961e903af10f2bc5a2ce1aa26d0ecee841b48ea 100644 (file)
@@ -170,6 +170,7 @@ gtk_tree_sortable_set_sort_func (GtkTreeSortable        *sortable,
   GtkTreeSortableIface *iface;
 
   g_return_if_fail (GTK_IS_TREE_SORTABLE (sortable));
+  g_return_if_fail (sort_func != NULL);
 
   iface = GTK_TREE_SORTABLE_GET_IFACE (sortable);
 
index 48b0637537e18c21626da5dd25db617043da1180..4de65e394fa8495697666b9fd41aaa1fe55a62fd 100644 (file)
@@ -1151,12 +1151,15 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
   gtk_binding_entry_add_signal (binding_set, GDK_f, GDK_CONTROL_MASK, "start_interactive_search", 0);
 
   gtk_binding_entry_add_signal (binding_set, GDK_F, GDK_CONTROL_MASK, "start_interactive_search", 0);
+
+  g_type_class_add_private (o_class, sizeof (GtkTreeViewPrivate));
 }
 
 static void
 gtk_tree_view_init (GtkTreeView *tree_view)
 {
-  tree_view->priv = g_new0 (GtkTreeViewPrivate, 1);
+  tree_view->priv = G_TYPE_INSTANCE_GET_PRIVATE (tree_view, GTK_TYPE_TREE_VIEW, GtkTreeViewPrivate);
+
   GTK_WIDGET_SET_FLAGS (tree_view, GTK_CAN_FOCUS);
 
   gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
@@ -1316,10 +1319,6 @@ gtk_tree_view_get_property (GObject    *object,
 static void
 gtk_tree_view_finalize (GObject *object)
 {
-  GtkTreeView *tree_view = (GtkTreeView *) object;
-
-  g_free (tree_view->priv);
-
   (* G_OBJECT_CLASS (parent_class)->finalize) (object);
 }
 
index c07b193f3013f2fa1e3054b90c218c26465869f1..4a7b1715d6d2fd3636ef1e40f5339f10c0449943 100644 (file)
@@ -980,12 +980,18 @@ get_node (GtkUIManager *self,
   return node;
 }
 
+static void
+node_ui_reference_free (gpointer data)
+{
+  g_slice_free (NodeUIReference, data);
+}
+
 static gboolean
 free_node (GNode *node)
 {
   Node *info = NODE_INFO (node);
   
-  g_list_foreach (info->uifiles, (GFunc) g_free, NULL);
+  g_list_foreach (info->uifiles, (GFunc) node_ui_reference_free, NULL);
   g_list_free (info->uifiles);
 
   if (info->action)
@@ -1032,7 +1038,7 @@ node_prepend_ui_reference (GNode  *gnode,
     reference = node->uifiles->data;
   else
     {
-      reference = g_new (NodeUIReference, 1);
+      reference = g_slice_new (NodeUIReference);
       node->uifiles = g_list_prepend (node->uifiles, reference);
     }
 
@@ -1058,7 +1064,7 @@ node_remove_ui_reference (GNode  *gnode,
          if (p == node->uifiles)
            mark_node_dirty (gnode);
          node->uifiles = g_list_delete_link (node->uifiles, p);
-         g_free (reference);
+         g_slice_free (NodeUIReference, reference);
 
          break;
        }
index fc01393cdfdd971201beaa569501f0d38213c408..ac936d240c5a95c35fcc7bcb535e7ec74d8e2e17 100644 (file)
@@ -3340,7 +3340,6 @@ gtk_widget_list_accel_closures (GtkWidget *widget)
 
 typedef struct {
   GQuark         path_quark;
-  GtkWidget     *widget;
   GtkAccelGroup *accel_group;
   GClosure      *closure;
 } AccelPath;
@@ -3355,7 +3354,7 @@ destroy_accel_path (gpointer data)
   /* closures_destroy takes care of unrefing the closure */
   g_object_unref (apath->accel_group);
   
-  g_free (apath);
+  g_slice_free (AccelPath, apath);
 }
 
 
@@ -3399,11 +3398,10 @@ gtk_widget_set_accel_path (GtkWidget     *widget,
       g_return_if_fail (_gtk_accel_path_is_valid (accel_path));
 
       gtk_accel_map_add_entry (accel_path, 0, 0);
-      apath = g_new (AccelPath, 1);
-      apath->widget = widget;
+      apath = g_slice_new (AccelPath);
       apath->accel_group = g_object_ref (accel_group);
       apath->path_quark = g_quark_from_string (accel_path);
-      apath->closure = widget_new_accel_closure (apath->widget, GTK_WIDGET_GET_CLASS (apath->widget)->activate_signal);
+      apath->closure = widget_new_accel_closure (widget, GTK_WIDGET_GET_CLASS (widget)->activate_signal);
     }
   else
     apath = NULL;
@@ -5920,14 +5918,14 @@ gtk_widget_set_events (GtkWidget *widget,
   if (events)
     {
       if (!eventp)
-       eventp = g_new (gint, 1);
+       eventp = g_slice_new (gint);
       
       *eventp = events;
       g_object_set_qdata (G_OBJECT (widget), quark_event_mask, eventp);
     }
   else if (eventp)
     {
-      g_free (eventp);
+      g_slice_free (gint, eventp);
       g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
     }
 
@@ -5983,7 +5981,7 @@ gtk_widget_add_events (GtkWidget *widget,
     {
       if (!eventp)
        {
-         eventp = g_new (gint, 1);
+         eventp = g_slice_new (gint);
          *eventp = 0;
        }
       
@@ -5992,7 +5990,7 @@ gtk_widget_add_events (GtkWidget *widget,
     }
   else if (eventp)
     {
-      g_free (eventp);
+      g_slice_free (gint, eventp);
       g_object_set_qdata (G_OBJECT (widget), quark_event_mask, NULL);
     }
 
@@ -6033,7 +6031,7 @@ gtk_widget_set_extension_events (GtkWidget *widget,
   modep = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
   
   if (!modep)
-    modep = g_new (GdkExtensionMode, 1);
+    modep = g_slice_new (GdkExtensionMode);
   
   *modep = mode;
   g_object_set_qdata (G_OBJECT (widget), quark_extension_event_mode, modep);
@@ -6695,11 +6693,11 @@ gtk_widget_finalize (GObject *object)
   
   events = g_object_get_qdata (G_OBJECT (widget), quark_event_mask);
   if (events)
-    g_free (events);
+    g_slice_free (gint, events);
   
   mode = g_object_get_qdata (G_OBJECT (widget), quark_extension_event_mode);
   if (mode)
-    g_free (mode);
+    g_slice_free (GdkExtensionMode, mode);
 
   accessible = g_object_get_qdata (G_OBJECT (widget), quark_accessible_object);
   if (accessible)
@@ -6973,7 +6971,7 @@ static void
 gtk_widget_shape_info_destroy (GtkWidgetShapeInfo *info)
 {
   g_object_unref (info->shape_mask);
-  g_free (info);
+  g_slice_free (GtkWidgetShapeInfo, info);
 }
 
 /**
@@ -7012,7 +7010,7 @@ gtk_widget_shape_combine_mask (GtkWidget *widget,
     {
       GTK_PRIVATE_SET_FLAG (widget, GTK_HAS_SHAPE_MASK);
       
-      shape_info = g_new (GtkWidgetShapeInfo, 1);
+      shape_info = g_slice_new (GtkWidgetShapeInfo);
       g_object_set_qdata_full (G_OBJECT (widget), quark_shape_info, shape_info,
                               (GDestroyNotify) gtk_widget_shape_info_destroy);
       
index 4fbcab3df9b7d94f96bf66fbec08b8184399c5fd..520f03eb683c8fea51a746d54dc6f25479bebd3c 100644 (file)
@@ -289,6 +289,11 @@ static guint        default_icon_serial = 0;
 static gboolean     disable_startup_notification = FALSE;
 static gboolean     sent_startup_notification = FALSE;
 
+static GQuark       quark_gtk_embedded = 0;
+static GQuark       quark_gtk_window_key_hash = 0;
+static GQuark       quark_gtk_window_default_icon_pixmap = 0;
+static GQuark       quark_gtk_window_icon_info = 0;
+
 static void gtk_window_set_property (GObject         *object,
                                     guint            prop_id,
                                     const GValue    *value,
@@ -376,6 +381,11 @@ gtk_window_class_init (GtkWindowClass *klass)
   
   parent_class = g_type_class_peek_parent (klass);
 
+  quark_gtk_embedded = g_quark_from_static_string ("gtk-embedded");
+  quark_gtk_window_key_hash = g_quark_from_static_string ("gtk-window-key-hash");
+  quark_gtk_window_default_icon_pixmap = g_quark_from_static_string ("gtk-window-default-icon-pixmap");
+  quark_gtk_window_icon_info = g_quark_from_static_string ("gtk-window-icon-info");
+
   gobject_class->dispose = gtk_window_dispose;
   gobject_class->finalize = gtk_window_finalize;
 
@@ -1726,17 +1736,16 @@ gtk_window_add_embedded_xid (GtkWindow *window, guint xid)
 
   g_return_if_fail (GTK_IS_WINDOW (window));
 
-  embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
+  embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
   if (embedded_windows)
-    g_object_steal_qdata (G_OBJECT (window), 
-                         g_quark_from_static_string ("gtk-embedded"));
+    g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
   embedded_windows = g_list_prepend (embedded_windows,
                                     GUINT_TO_POINTER (xid));
 
-  g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded")
-                         embedded_windows,
-                         embedded_windows ?
-                           (GDestroyNotify) g_list_free : NULL);
+  g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded
+                          embedded_windows,
+                          embedded_windows ?
+                          (GDestroyNotify) g_list_free : NULL);
 }
 
 void
@@ -1747,10 +1756,9 @@ gtk_window_remove_embedded_xid (GtkWindow *window, guint xid)
 
   g_return_if_fail (GTK_IS_WINDOW (window));
   
-  embedded_windows = g_object_get_data (G_OBJECT (window), "gtk-embedded");
+  embedded_windows = g_object_get_qdata (G_OBJECT (window), quark_gtk_embedded);
   if (embedded_windows)
-    g_object_steal_qdata (G_OBJECT (window), 
-                         g_quark_from_static_string ("gtk-embedded"));
+    g_object_steal_qdata (G_OBJECT (window), quark_gtk_embedded);
 
   node = g_list_find (embedded_windows, GUINT_TO_POINTER (xid));
   if (node)
@@ -1759,10 +1767,10 @@ gtk_window_remove_embedded_xid (GtkWindow *window, guint xid)
       g_list_free_1 (node);
     }
   
-  g_object_set_data_full (G_OBJECT (window), I_("gtk-embedded"),
-                         embedded_windows,
-                         embedded_windows ?
-                           (GDestroyNotify) g_list_free : NULL);
+  g_object_set_qdata_full (G_OBJECT (window), quark_gtk_embedded,
+                          embedded_windows,
+                          embedded_windows ?
+                          (GDestroyNotify) g_list_free : NULL);
 }
 
 void       
@@ -2538,15 +2546,14 @@ gtk_window_get_deletable (GtkWindow *window)
 static GtkWindowIconInfo*
 get_icon_info (GtkWindow *window)
 {
-  return g_object_get_data (G_OBJECT (window),
-                            "gtk-window-icon-info");
+  return g_object_get_qdata (G_OBJECT (window), quark_gtk_window_icon_info);
 }
      
 static void
 free_icon_info (GtkWindowIconInfo *info)
 {
   g_free (info->icon_name);
-  g_free (info);
+  g_slice_free (GtkWindowIconInfo, info);
 }
 
 
@@ -2559,9 +2566,9 @@ ensure_icon_info (GtkWindow *window)
   
   if (info == NULL)
     {
-      info = g_new0 (GtkWindowIconInfo, 1);
-      g_object_set_data_full (G_OBJECT (window),
-                              I_("gtk-window-icon-info"),
+      info = g_slice_new0 (GtkWindowIconInfo);
+      g_object_set_qdata_full (G_OBJECT (window),
+                              quark_gtk_window_icon_info,
                               info,
                               (GDestroyNotify)free_icon_info);
     }
@@ -2578,12 +2585,13 @@ typedef struct {
 static ScreenIconInfo *
 get_screen_icon_info (GdkScreen *screen)
 {
-  ScreenIconInfo *info = g_object_get_data (G_OBJECT (screen), 
-                                           "gtk-window-default-icon-pixmap");
+  ScreenIconInfo *info = g_object_get_qdata (G_OBJECT (screen), 
+                                            quark_gtk_window_default_icon_pixmap);
   if (!info)
     {
-      info = g_new0 (ScreenIconInfo, 1);
-      g_object_set_data (G_OBJECT (screen), I_("gtk-window-default-icon-pixmap"), info);
+      info = g_slice_new0 (ScreenIconInfo);
+      g_object_set_qdata (G_OBJECT (screen), 
+                         quark_gtk_window_default_icon_pixmap, info);
     }
 
   if (info->serial != default_icon_serial)
@@ -4775,7 +4783,7 @@ send_client_message_to_embedded_windows (GtkWidget *widget,
 {
   GList *embedded_windows;
 
-  embedded_windows = g_object_get_data (G_OBJECT (widget), "gtk-embedded");
+  embedded_windows = g_object_get_qdata (G_OBJECT (widget), quark_gtk_embedded);
   if (embedded_windows)
     {
       GdkEvent *send_event = gdk_event_new (GDK_CLIENT_EVENT);
@@ -7490,9 +7498,15 @@ struct _GtkWindowKeyEntry
 {
   guint keyval;
   guint modifiers;
-  gboolean is_mnemonic;
+  guint is_mnemonic : 1;
 };
 
+static void 
+window_key_entry_destroy (gpointer data)
+{
+  g_slice_free (GtkWindowKeyEntry, data);
+}
+
 static void
 add_to_key_hash (GtkWindow      *window,
                 guint           keyval,
@@ -7502,7 +7516,7 @@ add_to_key_hash (GtkWindow      *window,
 {
   GtkKeyHash *key_hash = data;
 
-  GtkWindowKeyEntry *entry = g_new (GtkWindowKeyEntry, 1);
+  GtkWindowKeyEntry *entry = g_slice_new (GtkWindowKeyEntry);
 
   entry->keyval = keyval;
   entry->modifiers = modifiers;
@@ -7526,15 +7540,15 @@ static GtkKeyHash *
 gtk_window_get_key_hash (GtkWindow *window)
 {
   GdkScreen *screen = gtk_window_check_screen (window);
-  GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+  GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
   
   if (key_hash)
     return key_hash;
   
   key_hash = _gtk_key_hash_new (gdk_keymap_get_for_display (gdk_screen_get_display (screen)),
-                               (GDestroyNotify)g_free);
+                               (GDestroyNotify)window_key_entry_destroy);
   _gtk_window_keys_foreach (window, add_to_key_hash, key_hash);
-  g_object_set_data (G_OBJECT (window), I_("gtk-window-key-hash"), key_hash);
+  g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, key_hash);
 
   return key_hash;
 }
@@ -7542,11 +7556,11 @@ gtk_window_get_key_hash (GtkWindow *window)
 static void
 gtk_window_free_key_hash (GtkWindow *window)
 {
-  GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+  GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
   if (key_hash)
     {
       _gtk_key_hash_free (key_hash);
-      g_object_set_data (G_OBJECT (window), "gtk-window-key-hash", NULL);
+      g_object_set_qdata (G_OBJECT (window), quark_gtk_window_key_hash, NULL);
     }
 }
 
@@ -7566,13 +7580,13 @@ gboolean
 gtk_window_activate_key (GtkWindow   *window,
                         GdkEventKey *event)
 {
-  GtkKeyHash *key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+  GtkKeyHash *key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
   GtkWindowKeyEntry *found_entry = NULL;
 
   if (!key_hash)
     {
       gtk_window_keys_changed (window);
-      key_hash = g_object_get_data (G_OBJECT (window), "gtk-window-key-hash");
+      key_hash = g_object_get_qdata (G_OBJECT (window), quark_gtk_window_key_hash);
     }
   
   if (key_hash)
index 164b4c2bb718624aeea4e1624a96c640b5a8655a..d4718b0ad9a3ca88d3650e33a26b0d77c2fe3f27 100644 (file)
@@ -47,7 +47,7 @@ static GSList *current_messages;
 void
 _gtk_xembed_push_message (XEvent *xevent)
 {
-  GtkXEmbedMessage *message = g_new (GtkXEmbedMessage, 1);
+  GtkXEmbedMessage *message = g_slice_new (GtkXEmbedMessage);
   
   message->time = xevent->xclient.data.l[0];
   message->message = xevent->xclient.data.l[1];
@@ -68,8 +68,7 @@ _gtk_xembed_pop_message (void)
 {
   GtkXEmbedMessage *message = current_messages->data;
   current_messages = g_slist_delete_link (current_messages, current_messages);
-
-  g_free (message);
+  g_slice_free (GtkXEmbedMessage, message);
 }
 
 /**